package com.hmall.common.interceptor;


import cn.hutool.core.util.StrUtil;
import com.hmall.common.utils.UserContext;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//最佳实践
//复杂配置：当 Bean 需要复杂的初始化逻辑或依赖注入时，使用配置类更为合适。
//第三方库：当需要将第三方库的类注册为 Spring Bean 时，通常使用配置类。
//条件装配：当 Bean 的创建需要根据某些条件进行时，可以使用配置类中的条件注解（如 @Conditional）。
public class UserInfoInterceptor implements HandlerInterceptor {
    //注意拦截器不做拦截因为在网关已经做了登录校验拦截这里只需要获取用户信息即可
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //获取请求头的用户信息
        String userInfo = request.getHeader("user-info");
        //因为会有不拦截的路径没有用户数据所以需要判断
        if(StrUtil.isNotBlank(userInfo)){//isNotBlank可以判断null和空字符串
            //将用户信息放入threadLocal
            UserContext.setUser(Long.valueOf(userInfo));

        }
        return true;

    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        //清除用户信息
        UserContext.removeUser();
    }
}
